package com.hulk.dryad.admin.control;

import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.xiaoymin.knife4j.annotations.ApiSort;
import com.hulk.dryad.admin.api.vo.SysFileVO;
import com.hulk.dryad.admin.mapstruct.SysFileStruct;
import com.hulk.dryad.common.annotation.PrintlnLog;
import com.hulk.dryad.common.annotation.Idempotent;
import com.hulk.dryad.common.component.R;
import com.hulk.dryad.persistence.entity.SysFileModel;
import com.hulk.dryad.persistence.service.SysFileService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

/**
 * 文件管理
 *
 * @author kim
 * @date 2019-06-18 17:18:42
 */
@ApiSort(8)
@Api(value = "sys-file", tags = "文件管理")
@RestController
@AllArgsConstructor
@RequestMapping("/admin/sys-file")
public class SysFileController {

	private final SysFileService sysFileService;

	/**
	 * 分页查询
	 * @param page 分页对象
	 * @param sysFile 文件管理
	 * @return
	 */
	@ApiOperation(value = "分页查询", notes = "分页查询")
	@PrintlnLog
	@GetMapping("/page")
	public R getSysFilePage(Page page, SysFileVO sysFile) {
		SysFileModel model =	SysFileStruct.INSTANCE.to(sysFile);
		return R.ok(sysFileService.page(page, Wrappers.query(model)));
	}

	/**
	 * 通过id删除文件管理
	 * @param id id
	 * @return R
	 */
	@ApiOperation(value = "通过id删除文件管理", notes = "通过id删除文件管理")
	@PrintlnLog
	@DeleteMapping("/{id}")
	@PreAuthorize("@pms.hasPermission('sys_file_del')")
	public R removeById(@PathVariable Long id) {
		return R.ok(sysFileService.deleteFile(id));
	}

	/**
	 * 上传文件 文件名采用uuid,避免原始文件名中带"-"符号导致下载的时候解析出现异常
	 * @param file 资源
	 * @return R(/ admin / bucketName / filename)
	 */
	@ApiOperation(value = "uploadFile", notes = "文件名采用uuid,避免原始文件名中带-符号导致下载的时候解析出现异常")
	@Idempotent
	@PrintlnLog
	@PostMapping("/upload")
	//@PreAuthorize("@pms.hasPermission('sys_file_add')")
	public R upload(@RequestParam("file") MultipartFile file) {
		return sysFileService.uploadFile(file);
	}

//	/**
//	 * 获取文件
//	 * @param bucket 桶名称
//	 * @param fileName 文件空间/名称
//	 * @param response
//	 * @return
//	 */
//	@GetMapping("/{bucket}/{fileName}")
//	public void file(@PathVariable String bucket, @PathVariable String fileName, HttpServletResponse response) {
//		sysFileService.getFile(bucket, fileName, response);
//	}

}
